#include "octane-oslintrin.h"
vector zx(vector v)
{
    return vector(v[2], v[0], 0);
}

float displace(float d1,vector p, vector noise)
{
    float d2 = noise[0];
    return d1 + d2;
}
    
float sphereSDF(vector p, float r)
{
    return length(p) -r;
}

float boxSDF(vector p, float size)
{
  	return length(max(abs(p)- vector(size),0.0));
}

float repeat_sphere(vector p, vector c)
{
    vector q = mod(p,c) - 0.5*c;
    
    return boxSDF(q, 7.0);
}

float smin(float a, float b, float k)
{
    float res = exp(-k*a) + exp(-k*b);
    return -log(res)/k;
}

/*
float sceneSDF(vector p, vector noise)
{
    float terrain = displace(planeSDF(p), p, noise);
    return terrain;
}*/

shader Displace(
	_sdf input1 = _SDFDEF,
    color noiseTex = color(1,1,1),
    float noiseScale = 0.1,
    float quality = 0.9,
    output _sdf c = _SDFDEF)
{
    c.dist = (1-quality) * displace(input1.dist, P, -1*noiseTex * noiseScale);
}
